package pos.presentation;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.omg.CORBA.Request;

import pos.data.JDBCUsuarioDAO;

import Clases.domain.Usuario;

public class FrontController extends HttpServlet {

	public void init() throws ServletException {
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);

	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	public void processRequest(HttpServletRequest request,
			HttpServletResponse response) throws IOException, ServletException {
		if (logado(request)) {
			String resource = request.getParameter("res");
			RequestDispatcher d = request.getRequestDispatcher(resource);
			if (d != null) {
				d.forward(request, response);
			}
			System.out.println("LOGADO ACCEDIENDO A " + resource);
		} else {
			response.sendRedirect("error.jsp");
		}

	}

	private boolean logado(HttpServletRequest request) {
		boolean logado = false;
		// obtenemos la sesion
		HttpSession session = request.getSession(false);
		// obtenemos los datos del cliente
		String userForm = request.getParameter("user");
		String passwdForm = request.getParameter("passwd");
		// existe la sesion???
		if (session == null) {
			// no existe la sesion
			session = request.getSession();// si no se le pasa ningun parametro
											// se crea la sesion
			// TODO Completar condición
			// ¿hay datos del cliente?
			if (userForm == null || passwdForm == null) {
				// ni existe la sesion ni se han introducido el usuario ni el
				// password en el formulario
				logado = false;

			} else {
				if (valido(userForm, passwdForm)) {
					// se han introducido un usuario y un password y son validos
					logado = true;
					session.setAttribute("session.user", userForm);// meto el
																	// nuevo
																	// usuario
																	// en la
																	// sesion
					Usuario usuario = (new JDBCUsuarioDAO()).selectUsuario(
							userForm, passwdForm);
					if (usuario != null) {
						session.setAttribute("session.usuario", usuario);
					}
				} else {
					// se han introducido un usuario y un password pero no son
					// validos
					logado = false;
				}

			}

		} else {
			// TODO Completar condición
			// Existe una sesion de antes
			if (userForm == null || passwdForm == null) {
				// no se ha insertado un nuevo usuario y password asi k se
				// mantiene la sesion y logado
				logado = true;
			} else {
				// TODO Completar condición

				// Se han introducido nuevos datos en el usuario y el password
				// del formulario
				if (valido(userForm, passwdForm)) {
					// el nuevo usuario y password del formulario son validos
					logado = true;
					session.setAttribute("session.user", userForm);
					Usuario usuario = (new JDBCUsuarioDAO()).selectUsuario(
							userForm, passwdForm);
					if (usuario != null) {
						session.setAttribute("session.usuario", usuario);
					}
				} else {
					// el nuevo usuario y password no es valido
					logado = false;
				}

			}
		}
		return logado;
	}

	public boolean valido(String userForm, String passwdForm) {
		boolean val;

		if (userForm.equals("") || passwdForm.equals(""))
			return false;
		Usuario usuario = (new JDBCUsuarioDAO()).selectUsuario(userForm,
				passwdForm);

		if (usuario == null) {
			val = false;
		} else {
			val = true;
		}
		return val;

	}

}